/**
 * Paquete que contiene los objetos.
 */
package co.sumset.objetos;

import java.awt.event.KeyEvent;

/**
 * Clase Base representa el objeto que contiene a las Invocaciones.
 * 
 * @author Cristian Raul Pineda Rodriguez
 *
 */
public class Base extends Actor {

	public static final int MAX_SHIELDS = 200;//Cantidad maxima del puntaje de vida
	public static final int MAX_BOMBS = 5;// Cantidad de bombas
	private int clusterInv;//Cantidad invocacines.

	/**
	 * Metodo Constructor. Inicializa los recursos para el escenario.
	 * 
	 * @param stage
	 */
	public Base(Escenario stage)
	{
		super(stage);

		setSpriteNames( stage.getAdministrador().getBodegaImagenes().getBase());
		clusterInv=stage.getAdministrador().getNivel().getNum_invocacion();
		frameSpeed=0;
	}

	/**
	 * Este metodo permite ejecutar acciones para una Base.
	 */
	public void act() {
		super.act();
		setFrameSpeed(25);
	}

	/**
	 * Este metodo permite verificar las collisiones con otros Actores en el 
	 * caso de la Base si los Actores son: Laser; si estos colisionan con la
	 * Base son destruidos y removidos del escenario
	 * 
	 * @param a ; Recibe los actores que colisionan en el Escenario con la Base.
	 */
	public void collision(Actor a) {

		if (a instanceof Laser ) {
			a.remove();
		}
	}

	/**
	 * Metodo que permite crear el Actor Invocacion y preparar
	 * los recursos (sonidos e imagenes) para el escenario.
	 * Segun sea el nivel se determinar un numero diferente
	 * de invocaciones para el jugador.
	 */
	public void invocar() {
		if (clusterInv == 0)
			return;

		clusterInv--;
		Invocacion m = new Invocacion(stage);
		m.set$varX($varX );
		m.set$varY($varY);
		int auxX = (int)(Math.random()*6);
		int auxY = (int)(Math.random()*6);
		if (auxX==0||auxY==0) {
			m.setVx(1);
			m.setVy(1);
		}else{
			m.setVx(auxX);
			m.setVy(auxY);
		}

		stage.addActor(m);
		stage.getSoundCache().playSound("missile.wav");
	}

	/**
	 * Metodo que permite enviar los eventos de teclado a una Base para que
	 * ejecute acciones. Con la tecla N se permite hacer invocaciones.
	 * @param e : Evento de teclado
	 */
	public void keyPressed(KeyEvent e) {
		switch (e.getKeyCode()) {

		case KeyEvent.VK_N : invocar(); break;

		}
	}
}